#!/bin/bash
# 自己配置的简单zsh （非 oh-my-zsh）

#----------------------------------------------------------------------
# Initialize environment and alias
#----------------------------------------------------------------------


#----------------------------------------------------------------------
# tune global options
#----------------------------------------------------------------------
HISTSIZE=5000
HISTFILESIZE=10000

#开启颜色
autoload -U colors && colors       
#配置提示符模式。。 其实配置之前的PS1也是可以的 但是为了尊重说明文档。。。
PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[green]%}%1|%~ %{$reset_color%}%#>"        
#在行末显示上一命令的返回状态
RPROMPT="[%{$fg_bold[yellow]%}%?%{$reset_color%}]"


# 关闭每天会在第一次打开时进行自动更新检测（需要开启时注释掉）
DISABLE_AUTO_UPDATE="true" 

# default editor
export EDITOR=vim
# export TERM=xterm-256color


# 解决zsh:zsh: command not found:
export PATH=~/.npm-global/bin:${PATH}:/usr/local/bin


# 自定义主题
#PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}>'


## 插件

[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# 历史命令搜索插件
[ -f ~/.config/zsh-history-substring-search/zsh-history-substring-search.zsh ] && source ~/.config/zsh-history-substring-search/zsh-history-substring-search.zsh
# 命令高亮插件
[ -f ~/.config/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ] && source ~/.config/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# 自动补全可能的路径插件
[ -f ~/.config/zsh-autosuggestions/zsh-autosuggestions.zsh ] && source ~/.config/zsh-autosuggestions/zsh-autosuggestions.zsh

#  vi(vim) 模式插件
[ -f ~/.config/vi-mode/vi-mode.zsh ] && source ~/.config/vi-mode/vi-mode.zsh

# 更友好的 vi(vim) 模式插件
#[ -f ~/.config/zsh-vi-mode/zsh-vi-mode.zsh ] && source ~/.config/zsh-vi-mode/zsh-vi-mode.zsh


# 快速跳转文件夹
eval "$(lua ~/.config/z.lua/z.lua --init zsh enhanced once echo)"

# 1、git：当你处于一个 git 受控的目录下时，Shell 会明确显示 「git」和 branch，如上图所示，另外对 git 很多命令进行了简化，例如 gco=’git checkout’、gd=’git diff’、gst=’git status’、g=’git’等等，熟练使用可以大大减少 git 的命令长度，命令内容可以参考~/.oh-my-zsh/plugins/git/git.plugin.zsh

# 2、textmate：mr可以创建 ruby 的框架项目，tm finename 可以用 textmate 打开指定文件。

# 3、osx：tab 增强，quick-look filename 可以直接预览文件，man-preview grep 可以生成 grep手册 的pdf 版本等。

# 4、autojump：zsh 和 autojump 的组合 目录浏览和跳转。

# 自定义命令
# 使用cd fd fzf 查找与切换vim文件
vimf(){
    vim $(fzf --preview 'cat {}')
}
nvimf(){
    nvim $(fzf --preview 'cat {}')
}

# 使用cd fd fzf 查找与切换目录
cdf(){
   # cd $(fd -p '/' -t d | fzf )
   # cd $(fd -p ’/‘ -t d | fzf --preview 'ls -alh {}')
   cd $(fd  -t  d | fzf --preview 'ls -ahl {}' )
}

## 终端命令行查英语单词
v2(){
	declare q="$*";
	#curl --user-agent curl "https://v2en.co/${q// /%20}";
	curl --user-agent curl "https://d.supjohn.com/${q// /%20}";

}
## v2-sh 可以直接进入交互模式，不用重复输入 v2 前缀
v2-sh(){
	while echo -n "v2en>";
	read -r input;
	[[ -n "$input" ]]
	do v2 "$input";
	done
}


# ranger 配置
## 会自动切换到最后一次浏览的目录.
# rangerhistory(){
ranger_cd() {
    temp_file="$(mktemp -t "ranger_cd.XXXXXXXXXX")"
    # ranger --choosedir="$temp_file" -- "${@:-$PWD}"        # 退出ranger后不会切换到最后停留的目录地址
    source ranger --choosedir="$temp_file" -- "${@:-$PWD}"   # 退出ranger后会切换到最后停留的目录地址
    if chosen_dir="$(cat -- "$temp_file")" && [ -n "$chosen_dir" ] && [ "$chosen_dir" != "$PWD" ]; then
        cd -- "$chosen_dir"
    fi
    rm -f -- "$temp_file"
}

# 设置ranger命令通用别名
alias r='ranger'
alias rc='source ranger'  # 退出ranger后会切换到最后停留的目录地址
alias rh='ranger_cd'

# 设置git命令通用别名
alias gl='git pull'
alias gu='git push'
alias gs='git status -s'

# 设置命令通用别名
alias cls='clear'
alias ll='ls -lh'
alias la='ls -lAh'
alias vi='vim'
alias javac="javac -J-Dfile.encoding=utf8"
alias grep="grep --color=auto"

#alias grep='grep --color=tty'
#alias nvim='/usr/local/opt/bin/vim --cmd "let g:vim_startup=\"nvim\""'
#alias mvim='/usr/local/opt/bin/vim --cmd "let g:vim_startup=\"mvim\""'
# alias tmux='tmux -2'

alias d='dirs -v'   # 历史目录快速跳转

## 针对文件类型设置对应的打开程序
# alias -s html=mate               # 在命令行直接输入后缀为 html 的文件名，会在 TextMate 中打开，以下类似
# alias -s rb=mate                 # 在命令行直接输入 ruby 文件，会在 TextMate 中打开
alias -s py=vim                   # 在命令行直接输入 python 文件，会用 vim 中打开
alias -s js=vim                   # 在命令行直接输入 js 文件，会用 vim 中打开
alias -s c=vim                    # 在命令行直接输入 c 文件，会用 vim 中打开
alias -s java=vim                # 在命令行直接输入 java 文件，会用 vim 中打开
alias -s txt=vim                 # 在命令行直接输入 txt 文件，会用 vim 中打开

alias -s gz='tar -xzvf'          # 在命令行直接输入 文件名，会自动解压后缀为 gz 的压缩包
alias -s tgz='tar -xzvf'         # 在命令行直接输入 文件名，会自动解压后缀为 tgz 的压缩包
alias -s zip='unzip'             # 在命令行直接输入 文件名，会自动解压后缀为 zip 的压缩包
alias -s bz2='tar -xjvf'         # 在命令行直接输入 文件名，会自动解压后缀为 bz2 的压缩包




# 使用说明

# 1、各种补全：路径补全、命令补全，命令参数补全，插件内容补全等等。
## 触发补全只需要按一下或两下 tab 键，补全项可以使用 ctrl+n/p/f/b上下左右切换。
## 例1: 你想杀掉 java 的进程，只需要输入 kill java + tab键，如果只有一个 java 进程，zsh 会自动替换为进程的 pid，如果有多个则会出现选择项供你选择。
## 例2: ssh + 空格 + 两个tab键，zsh会列出所有访问过的主机和用户名进行补全

# 2、智能跳转，安装了autojump之后，zsh 会自动记录你访问过的目录，通过 j + 目录名 可以直接进行目录跳转，而且目录名支持模糊匹配和自动补全
## 例1: 如访问过hadoop-1.0.0目录，输入j hado 即可正确跳转。
## 例2: j –stat 可以看你的历史路径库。

# 3、目录浏览和跳转：输入 d，即可列出你在这个会话里访问的目录列表，输入列表前的序号，即可直接跳转。

# 4、在当前目录下输入 .. 或 … ，或直接输入当前目录名都可以跳转，你甚至不再需要输入 cd 命令了。


#> 参考资料
# - [终极 Shell——ZSH](https://zhuanlan.zhihu.com/p/19556676)
# - [zsh 自定义命令提示符(PS1/ prompt)](https://blog.csdn.net/u014218108/article/details/51195582)
# - [使用antigen轻松配置强大的zsh环境，你值得拥有](https://baijiahao.baidu.com/s?id=1665211562662460830&wfr=spider&for=pc)


